package com.tid; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import android.app.Activity; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.util.Log; import android.widget.TextView; public class Sensores_ejemplo extends Activity { private static final String TID_EX = "TID_EX"; /* http://developer.android.com/reference/android/hardware/SensorEvent.html#values. */ private TextView sensor1; private TextView sensor2; private TextView sensor3; private TextView sensor_a; private TextView sensor_b; private TextView sensor_c; private TextView sensor_x; private TextView sensor_y; private TextView general; ArrayList<TextView> textData; private SensorManager sensorManager; private SensorEventListener listenerACC; private SensorEventListener listenerMAG; private SensorEventListener listenerLight; private SensorEventListener listenerPROX; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initXMLElements(); initSensorListener(); } @Override protected void onStop() { Log.d(TID_EX, "onStop"); sensorManager.unregisterListener(listenerACC); sensorManager.unregisterListener(listenerMAG); sensorManager.unregisterListener(listenerLight); sensorManager.unregisterListener(listenerPROX); super.onStop(); } private void initSensorListener() { sensorManager=(SensorManager) getSystemService(SENSOR_SERVICE); List<Sensor> list = sensorManager.getSensorList(Sensor.TYPE_ALL); for (Iterator iterator = list.iterator(); iterator.hasNext();) { Sensor sensor = (Sensor) iterator.next(); appendDetails(":["+sensor.getName()+"] V:["+sensor.getVendor()+"] T:"+sensor.getType()); } listenerACC=new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){ // assign directions float x=event.values[0]; float y=event.values[1]; float z=event.values[2]; updateTextView("X: "+x, 0); updateTextView("Y: "+y, 1); updateTextView("Z: "+z, 2); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { appendDetails(sensor.getName()+"::"+String.valueOf(accuracy)); } }; sensorManager.registerListener(listenerACC, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_FASTEST); listenerMAG=new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { if(event.sensor.getType()==Sensor.TYPE_MAGNETIC_FIELD){ // assign directions float x=event.values[0]; float y=event.values[1]; float z=event.values[2]; updateTextView("X: "+x, 3); updateTextView("Y: "+y, 4); updateTextView("Z: "+z, 5); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { appendDetails(sensor.getName()+"::"+String.valueOf(accuracy)); } }; sensorManager.registerListener(listenerMAG, sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_UI); listenerLight=new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { float x=event.values[0]; updateTextView("LUX: "+x, 6); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { appendDetails(sensor.getName()+"::"+String.valueOf(accuracy)); } }; sensorManager.registerListener(listenerLight, sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT), SensorManager.SENSOR_DELAY_GAME); listenerPROX=new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { float x=event.values[0]; updateTextView("PROX: "+x, 7); } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { appendDetails(sensor.getName()+"::"+String.valueOf(accuracy)); } }; sensorManager.registerListener(listenerPROX, sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY), SensorManager.SENSOR_DELAY_GAME); } private void initXMLElements() { textData=new ArrayList<TextView>(); sensor1=(TextView) findViewById(R.id.txt_sensor1); sensor2=(TextView) findViewById(R.id.txt_sensor2); sensor3=(TextView) findViewById(R.id.txt_sensor3); sensor_a=(TextView) findViewById(R.id.txt_sensor_a); sensor_b=(TextView) findViewById(R.id.txt_sensor_b); sensor_c=(TextView) findViewById(R.id.txt_sensor_c); sensor_x=(TextView) findViewById(R.id.txt_sensor_x); sensor_y=(TextView) findViewById(R.id.txt_sensor_y); general=(TextView) findViewById(R.id.txt_detalles); textData.add(sensor1); textData.add(sensor2); textData.add(sensor3); textData.add(sensor_a); textData.add(sensor_b); textData.add(sensor_c); textData.add(sensor_x); textData.add(sensor_y); } public void updateTextView(final String newData,final int posSensor) { this.runOnUiThread(new Runnable() { @Override public void run() { // Log.d(TID_EX,"data:"+newData); textData.get(posSensor).setText(newData); } }); } public void appendDetails(final String newData) { this.runOnUiThread(new Runnable() { @Override public void run() { if (newData==null) general.setText(""); Log.d(TID_EX, "data:::"+newData); general.append("\n"+newData); } }); } }